package casarural;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class GestorPropietarios {
    
    InterfazCapaDatos gbd;
    private static String ficheroIPServidorBDRemoto = "ServidorBDRemotoIP.txt";

    private boolean autenticado=false;
    private String usuario; 
    private static GestorPropietarios elGestorPropietarios = new GestorPropietarios();

    private GestorPropietarios() {
        try {
            BufferedReader br;
            br = new BufferedReader(new FileReader(ficheroIPServidorBDRemoto));
            String IP = br.readLine();
            String numPuerto = br.readLine();
            String nombreServicio = br.readLine();
            br.close();
            
            gbd = (InterfazCapaDatos)Naming.lookup("rmi://" + IP + ":" + numPuerto + "/" + nombreServicio);
        } catch (FileNotFoundException e) {
            System.out.println("No se ha encontrado fichero con la IP del servidor de datos remoto.");
        } catch (RemoteException ex) {
            System.out.println("Problemas al buscar el servidor de la base de datos remoto." + "\n");
        } catch (MalformedURLException ex) {
            System.out.println("URL del servidor de la base de datos remoto incorrecta." + "\n");
        } catch (IOException e) {
            System.out.println("Error leyendo el fichero con la IP del servidor de datos remoto.");
        } catch (NotBoundException ex) {
            System.out.println("Problema desconocido al buscar el servidor de la base de datos remoto." + "\n");
        } catch (Exception ex) {
            System.out.println("ERROR");
        }
    }   
    
    public static GestorPropietarios getInstance() {
        return elGestorPropietarios;
    }
    
    
    public boolean autenticarUsuario(String usuario, String password) {
        boolean resultado=false;
        try{
            if(gbd.hacerLogin(usuario, password))
            {
                setAutenticado(true);
                setUsuario (usuario);
                return true;
            }
        }catch(Exception ex)
        {
            System.out.println("ERROR autenticando usuario: " + ex.toString());
        }
        return resultado;
    }
    
    
    private void setAutenticado (boolean autenticado)
    {
        this.autenticado=autenticado;
    }
    
    private void setUsuario (String nUsuario)
    {
        this.usuario=nUsuario;
    }
    
    
    public boolean isAutenticado()
    {
        return autenticado;
    }
  
    public String getUsuarioAutenticado()
    {
        return usuario;
    }

}
